/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package test.net.sourceforge.pmd.symboltable;
import junit.framework.TestCase;
import net.sourceforge.pmd.ast.ASTClassBodyDeclaration;
import net.sourceforge.pmd.ast.ASTCompilationUnit;
import net.sourceforge.pmd.ast.ASTIfStatement;
import net.sourceforge.pmd.ast.ASTTryStatement;
import net.sourceforge.pmd.ast.SimpleNode;
import net.sourceforge.pmd.symboltable.BasicScopeCreationVisitor;
import net.sourceforge.pmd.symboltable.BasicScopeFactory;
import net.sourceforge.pmd.symboltable.GlobalScope;
import net.sourceforge.pmd.symboltable.LocalScope;
import net.sourceforge.pmd.symboltable.ScopeFactory;
import java.util.Stack;
public class ScopeCreationVisitorTest extends TestCase {
private class MyCB extends ASTClassBodyDeclaration {
public MyCB() {
super(1);
}
public boolean isAnonymousInnerClass() {
return true;
}
}
private class MySF implements ScopeFactory {
public boolean gotCalled;
public void openScope(Stack scopes, SimpleNode node) {
this.gotCalled = true;
scopes.add(new Object());
}
}
public void testScopesAreCreated() {
BasicScopeCreationVisitor sc = new BasicScopeCreationVisitor(new BasicScopeFactory());
ASTCompilationUnit acu = new ASTCompilationUnit(1);
acu.setScope(new GlobalScope());
ASTTryStatement tryNode = new ASTTryStatement(2);
tryNode.setScope(new LocalScope());
tryNode.jjtSetParent(acu);
ASTIfStatement ifNode = new ASTIfStatement(3);
ifNode.jjtSetParent(tryNode);
sc.visit(acu, null);
assertTrue(ifNode.getScope() instanceof LocalScope);
}
public void testAnonymousInnerClassIsCreated() {
MySF sf = new MySF();
BasicScopeCreationVisitor sc = new BasicScopeCreationVisitor(sf);
ASTClassBodyDeclaration cb = new MyCB();
sc.visit(cb, null);
assertTrue(sf.gotCalled);
}
public void testAnonymousInnerClassIsNotCreated() {
MySF sf = new MySF();
new BasicScopeCreationVisitor(sf).visit(new ASTClassBodyDeclaration(1), null);
assertFalse(sf.gotCalled);
}
}